/**
 * 冒泡排序函数
 * @param arr 需要排序的数组
 * @returns 排序后的数组
 */
function bubbleSort<T>(arr: T[]): T[] {
    const len = arr.length;
    
    // 创建数组副本，避免修改原数组
    const result = [...arr];
    
    // 外层循环控制排序轮数
    for (let i = 0; i < len - 1; i++) {
        // 内层循环进行相邻元素比较和交换
        for (let j = 0; j < len - 1 - i; j++) {
            // 如果前一个元素大于后一个元素，则交换它们的位置
            if (result[j] > result[j + 1]) {
                // 使用解构赋值进行交换
                [result[j], result[j + 1]] = [result[j + 1], result[j]];
            }
        }
    }
    
    return result;
}

// 使用新的测试数组
const numbers = [14, 56, 89, -98, 56, 65];
console.log('原始数组:', numbers);
console.log('排序后数组:', bubbleSort(numbers));

// 也可以用于字符串数组
const fruits = ['banana', 'apple', 'orange', 'grape'];
console.log('原始水果数组:', fruits);
console.log('排序后水果数组:', bubbleSort(fruits)); 

